package com.yskj.mwk.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

public class OrderNumberGenerator {
    // 用于生成同一毫秒内的序列号
    private final AtomicInteger sequence = new AtomicInteger(0);

    // 定义订单号的前缀，可以根据需要修改
    private final String PREFIX = "ORD";

    // 定义日期格式
    private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");

    /**
     * 生成订单号
     *
     * @return 订单号
     */
    public String generateOrderNumber() {
        // 获取当前时间戳（毫秒级）
        long timestamp = System.currentTimeMillis();

        // 获取同一毫秒内的序列号，并自增
        int seq = sequence.getAndIncrement();

        // 格式化时间戳为字符串
        String formattedTimestamp = dateFormat.format(new Date(timestamp));

        return formattedTimestamp + String.format("%03d", seq);
    }

    public static void main(String[] args) {
        // 测试生成订单号
        OrderNumberGenerator generator = new OrderNumberGenerator();
        for (int i = 0; i < 10; i++) {
            System.out.println(generator.generateOrderNumber());
        }
    }
}
